package io.mft.runtime.config.impl;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import io.mft.commons.config.ConfigProvider;
import io.mft.commons.config.mq.MqConfig;
import io.mft.commons.config.mq.MqConfig.ConfigValue;
import io.mft.runtime.config.ConfigLoader;
import lombok.extern.slf4j.Slf4j;
@Slf4j
public class ApplicationConfigMQLoader implements ConfigLoader<List<MqConfig>> {

	static boolean warn=false;
	@Override
	public List<MqConfig> load(String clusterId) {
		List<MqConfig> mqConfigs=new ArrayList<MqConfig>();
		List<ClassLoader> classLoaders=ConfigProvider.getConfigClassLoaders();
		classLoaders.forEach(classLoader->{
			try {
				Map<String, Object> mqConfigMap=ConfigProvider.getConfigObject(classLoader,"mqConfig");
				if (mqConfigMap==null) {
					if (!warn) {
						log.warn("MQ未配置,请检查是否忽略!!!!!!!!!!!!!!!");
						warn=true;
					}
					
				}else {
					JSONObject jsonObject=JSONUtil.parseObj(mqConfigMap);
					MqConfig mqConfig=jsonObject.toBean(MqConfig.class);
					mqConfig.keySet().forEach(type->{
						List<ConfigValue> list=mqConfig.get(type);
						list.forEach(c->{
							c.setType(type);
							c.setPluginId("mq");
							c.setOwnerPluginId("mq");
							c.init();
						});
					});		
					mqConfigs.add(mqConfig);
				}
			} catch (Exception e) {
				log.error("应用插件["+classLoader.getResource(".").getPath()+"]MQ配置解析异常",e);
			}
		});
		return mqConfigs;
	}

}
